package cn.stylefeng.guns.modular.rest.hapi;


import cn.hutool.json.JSONUtil;
import cn.stylefeng.guns.core.util.DateUtil;
import cn.stylefeng.guns.modular.ha.model.params.HaAgvTaskParam;
import cn.stylefeng.guns.modular.ha.service.HaAgvTaskService;
import cn.stylefeng.guns.modular.rest.hapi.vo.HaApiRes;
import cn.stylefeng.guns.modular.rest.hapi.vo.TaskInIby;
import cn.stylefeng.guns.modular.rest.hapi.vo.TaskOutIby;
import cn.stylefeng.roses.core.util.ToolUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.Date;

@Api(tags = "恒安接口调用")
@Controller
@RequestMapping("/rest/wcs")
public class RestHaWcsApiController {


    @Autowired
    private HaAgvTaskService haAgvTaskService;

    /**
     * 入库任务下发
     * 当 WMS 生成托盘入库任务后，将任务下发至 WCS，所有往堆垛机方向物流为入库方向，调用入库接口
     * 每一个任务带唯一标识 taskNo，下发和接收以唯一标识为依据
     * taskType = 1 入库任务
     * ISCM = 1 需要缠膜 0 不需要缠膜
     * ISZX = 1 需要整形 0 不需要整形
     * skuClass = 1，2，3，4，5，6，7，8，9，1 优先级最高，9 优先级最低，货位分配原则
     * @param taskInIby
     * @return
     */
    @Transactional(rollbackFor = Exception.class,timeout = 1800)
    @ApiOperation(value = "入库任务下发", notes = "当 WMS 生成托盘入库任务后，将任务下发至 WCS，所有往堆垛机方向物流为入库方向，调用入库接口")
    @ResponseBody
    @RequestMapping(value = "/taskIn", method = {RequestMethod.POST})
    public HaApiRes taskIn(@RequestBody TaskInIby taskInIby) {

        if(ToolUtil.isEmpty(taskInIby)){
            return null;
        }

        if(!"hengan-0130-S430-6002".equals(taskInIby.getPlatform())){
            return null;
        }

        HaAgvTaskParam addObj = new HaAgvTaskParam();
        addObj.setMessageId(taskInIby.getMessageId());
        addObj.setTaskTyp("入库任务");
        addObj.setReqStr(JSONUtil.toJsonStr(taskInIby));
        haAgvTaskService.add(addObj);
        
        String nowDate = DateUtil.DateFormat(new Date(), "yyyyMMdd HH:mm:ss");
        return HaApiRes.builder()
                .MessageId(taskInIby.getMessageId())
                .responseTime(nowDate)
                .responseVal(100)
                .responseMsg("Success")
                .build();
    }

    /**
     * 出库/移库任务下发
     * 当 WMS 生成托盘出库/移库任务后，将任务下发至WCS，出堆垛机方向的物流均调用出库接口
     * 每一个任务带唯一标识 taskNo，下发和接收以唯一标识为依据
     * taskType = 4 移库任务
     * taskType = 5 出缠绕膜任务
     * taskType = 6 空托盘任务
     * taskType = 16 出库任务
     * @param taskOutIby
     * @return
     */
    @Transactional(rollbackFor = Exception.class,timeout = 1800)
    @ApiOperation(value = "入库任务下发", notes = "当 WMS 生成托盘出库/移库任务后，将任务下发至WCS，出堆垛机方向的物流均调用出库接口")
    @ResponseBody
    @RequestMapping(value = "/taskOut", method = {RequestMethod.POST})
    public HaApiRes taskOut(@RequestBody TaskOutIby taskOutIby) {
        if(ToolUtil.isEmpty(taskOutIby)){
            return null;
        }
        if(!"hengan-0130-S430-6002".equals(taskOutIby.getPlatform())){
            return null;
        }
        HaAgvTaskParam addObj = new HaAgvTaskParam();
        addObj.setMessageId(taskOutIby.getMessageId());
        addObj.setTaskTyp("出库/移库任务");
        addObj.setReqStr(JSONUtil.toJsonStr(taskOutIby));
        haAgvTaskService.add(addObj);
        String nowDate = DateUtil.DateFormat(new Date(), "yyyyMMdd HH:mm:ss");
        return HaApiRes.builder()
                .MessageId(taskOutIby.getMessageId())
                .responseTime(nowDate)
                .responseVal(100)
                .responseMsg("Success")
                .build();
    }


}
